/*
 * Hilo_Recibidor.cpp
 *
 *  Created on: 28/05/2012
 *      Author: sebastian
 */

#include "Hilo_Recibidor.h"
#include "Consulta.h"

Hilo_Recibidor::Hilo_Recibidor(Servidor& s, Socket* sock) : serv(s), socket(sock) {
	stop();
}

Hilo_Recibidor::~Hilo_Recibidor() {
	delete socket;
}

void Hilo_Recibidor::run() {
	char buffer[BUFFER_SIZE];

	while(isRunning()) {
		std::string s_consulta;
		do {
			for(int i = 0; i < 300; ++i)
							buffer[i] = 0;
			int i = socket->recibir(buffer, BUFFER_SIZE);
			if(i < 0)
				stop();
			std::string aux(buffer);
			s_consulta.append(aux);
		} while (s_consulta.find('@') == std::string::npos);
		s_consulta.resize(s_consulta.size() - 1);
		Consulta* cons = new Consulta();
		std::cout << "respuesta "<< s_consulta << std::endl;
		cons->hidratar(s_consulta);
		cons->setId(socket->getFd());
		//consultas->push(cons);
		serv.pushConsulta(cons);
		/*
		int cant = socket->recibir(buffer, BUFFER_SIZE);
		if(cant <= 0)
			stop();
		else {
			std::string s_consulta(buffer);
			Consulta* cons = new Consulta();
			std::cout << "respuesta "<< s_consulta << std::endl;
			cons->hidratar(s_consulta);
			cons->setId(socket->getFd());
			//consultas->push(cons);
			serv.pushConsulta(cons);

		}*/
	}
}

void Hilo_Recibidor::cerrarSocket() {
	socket->cerrar();
}
